package DianShang_2024.ds_01.clean

import org.apache.spark.sql.SparkSession

object clean06 {
  def main(args: Array[String]): Unit = {
    /*
          将ods库中order_detail表昨天的分区（子任务一中生成的分区）数据抽取到dwd库中fact_order_detail的动态分区表，分区字段为etl_date，类型为String，
          取create_time值并将格式转换为yyyyMMdd，并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列，
          其中dwd_insert_user、dwd_modify_user均填写“user1”，dwd_insert_time、dwd_modify_time均填写当前操作时间，并进行数据类型转换。
          使用hive cli执行show partitions dwd.fact_order_detail命令，
     */

    //  准备sparksql的环境
    val spark=SparkSession.builder()
      .master("local[*]")
      .appName("数据清洗第六题")
      .enableHiveSupport()
      .getOrCreate()

    spark.sql("use dwd")
    //  将hive的分区模式设置为非严格模式(启动动态分区)  dynamic:动态的
    spark.sql("set hive.exec.dynamic.partition.mode=nonstrict")

//  在插入数据的查询中对表进行修改
    spark.sql(
      """
        |insert into table dwd.fact_order_detail
        |partition(etl_date)
        |select
        |id,
        |order_id,
        |sku_id,
        |sku_name,
        |img_url,
        |order_price,
        |sku_num,
        |to_timestamp(date_format(create_time,'yyyy-MM-dd'),'yyyy-MM-dd') as create_time,
        |source_type,
        |source_id,
        |'user1' as dwd_insert_user,
        |to_timestamp(date_format(current_timestamp(),'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss') as dwd_insert_time,
        |'user1' as dwd_modify_user,
        |to_timestamp(date_format(current_timestamp(),'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss') as dwd_modify_time,
        |etl_date
        |from ods.order_detail2
        |where etl_date='20231017'
        |""".stripMargin)


    //  关闭 sparksql的环境
    spark.close()
  }

}
